import tkinter as tk
import random
import pandas as pd
from tkinter import filedialog

# 全局变量，用于控制随机数滚动状态
is_running = False
# 用于存储定时任务的 ID
timer_id = None
# 用于存储文字颜色状态
color_index = 0
colors = ["red", "blue", "green"]

# 从Excel文件中读取数据
def load_data():
    global data
    file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx *.xls")])
    if file_path:
        data = pd.read_excel(file_path, usecols=["姓名", "帐号"])
        result_label.config(text="数据加载成功", font=("宋体", 30), fg="black")
        add_to_history("数据加载成功")

# 定义一个随机点名的函数
def random_call():
    global is_running, timer_id
    if not 'data' in globals():
        result_label.config(text="请先加载数据", font=("宋体", 30), fg="black")
        return
    if is_running:
        # 如果正在滚动，停止滚动
        is_running = False
        button.config(text="开始")
        if timer_id:
            root.after_cancel(timer_id)
        # 添加历史记录
        add_to_history(result_label.cget("text"))
    else:
        # 如果没有滚动，开始滚动
        is_running = True
        button.config(text="停止")
        update_random_name()

# 定时更新随机姓名的函数
def update_random_name():
    global timer_id
    # 随机选择一个姓名和账号
    random_row = data.sample(1).iloc[0]
    name = random_row["姓名"]
    account = random_row["帐号"]
    result_label.config(text=f"{name} - {account}", font=("宋体", 40))
    # 调用闪烁效果函数
    blink_text()
    if is_running:
        # 每隔 10 毫秒更新一次随机姓名
        timer_id = root.after(10, update_random_name)

# 文字闪烁效果函数
def blink_text():
    global color_index
    result_label.config(fg=colors[color_index])
    color_index = (color_index + 1) % len(colors)
    if is_running:
        root.after(100, blink_text)

# 添加历史记录
def add_to_history(result):
    history_text.insert(tk.END, f"{result}\n")
    history_text.see(tk.END)

# 创建主窗口
root = tk.Tk()
root.title("随机点名器")

# 设置窗口大小
window_width = 600
window_height = 600

# 获取屏幕的宽度和高度
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

# 计算窗口在屏幕中间时的左上角坐标
x = (screen_width - window_width) // 2
y = (screen_height - window_height) // 2

# 设置窗口的位置和大小
root.geometry(f"{window_width}x{window_height}+{x}+{y}")

# 创建按钮，点击按钮时调用 load_data 函数
load_button = tk.Button(root, text="加载数据", command=load_data, font=("宋体", 16))
load_button.pack(pady=20)

# 创建按钮，点击按钮时调用 random_call 函数
button = tk.Button(root, text="开始", command=random_call, font=("宋体", 16))
button.pack(pady=20)

# 创建显示结果的标签
result_label = tk.Label(root, text="", font=("宋体", 30))
result_label.pack(pady=10)

# 创建历史记录文本框
history_text = tk.Text(root, height=10, width=30, font=("宋体", 16))
history_text.pack(pady=20)

# 绑定 Enter 键到 random_call 函数
root.bind('<Return>', lambda event: random_call())

# 运行主循环，使窗口显示并响应用户操作
root.mainloop()